home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1994
/
MacHack 1994.toast
/
MacHack™94
/
Talks & Papers
/
Timothy Knox
/
yerk 3.66
/
Supplement
/
my stuff
/
zoomrect
< prev
Wrap
Text File
|
1994-06-24
|
2KB
|
78 lines
\ 02-16-88 srp class of rects that zoom
\ used especially for windows opening and closing
\ (as in the finder)
\ use a grafport defined for the entire screen
\ so that zooming rects are not clipped to
\ the current grafport
\
: zoom ;
0 variable penstate 14 allot
: savepstate penstate +base call GetPenState ;
: restPstate penstate +base call SetPenState ;
: l->g pack thepoint ! thepoint +base
call localtoglobal thepoint @ unpack ;
:Class BigPort <Super GrafPort
:M New: (abs) call OpenPort ;M
:M Close: (abs) call ClosePort ;M
:M Clip: addr: self 28 + @ -base @ -base 2+ put: rect ;M
;Class
BigPort Screen
:Class ZoomRect <Super Rect
int #steps
int Ldiff
int Tdiff
int Rdiff
int Bdiff
int swidth
int shght
rect source
rect dest
:M Diffs: gettopx: dest gettopx: source - put: Ldiff
gettopy: dest gettopy: source - put: Tdiff
size: source put: shght put: swidth
size: dest get: shght - put: Bdiff get: swidth - put: Rdiff ;M
:M Init: put: source put: dest put: #steps Diffs: self ;M
:M Steps: put: #steps ;M
:M Zoom: { \ zsteps ind zleft ztop -- }
savepstate
3 syspat +base call penpat
14 makeint call penmode
get: #steps -> zsteps
2 0
DO zsteps 0
DO i 1+ -> ind
gettopx: source get: Ldiff ind * zsteps / + -> zleft
gettopy: source get: Tdiff ind * zsteps / + -> ztop
zleft ztop
zleft get: swidth + get: Rdiff ind * zsteps / +
ztop get: shght + get: Bdiff ind * zsteps / +
put: self draw: self
LOOP
LOOP
restpstate ;M
;Class
zoomrect Zoomer
20 100 100 200 200 getrect: fwind init: zoomer
: ZoomIt pushport new: screen set: screen zoom: zoomer close: screen popport ;